package context

import (
	"encoding/json"
	"errors"
)

type Result struct {
	data map[string]interface{}
}

// 创建新的结果对象
func NewResult() *Result {
	return &Result{data: make(map[string]interface{})}
}

// 获取结果
func (r *Result) Get(key string) (interface{}, bool) {
	if !r.Exist(key) {
		return nil, false
	}

	return r.data[key], true
}

// 添加结果
func (r *Result) Put(key string, value interface{}) {
	r.data[key] = value
}

// 删除结果
func (r *Result) Del(key string) error {
	if !r.Exist(key) {
		return errors.New("不存在")
	}

	delete(r.data, key)
	return nil
}

// 检查是否存在键值
func (r *Result) Exist(key string) bool {
	_, ok := r.data["key"]
	return ok
}

// 引用数据对象
//func (r *Result) Data() map[string]interface{} {
//	return r.data
//}

// 将结果集转化为json字符串
func (r *Result) ToJson(isIndent bool) ([]byte, error) {
	if isIndent {
		return json.MarshalIndent(r.data, "", "  ")
	} else {
		return json.Marshal(r.data)
	}
}

// 结构体转map，未经测试
//func Struct2Map(obj interface{}) map[string]interface{} {
//	t := reflect.TypeOf(obj)
//	v := reflect.ValueOf(obj)

//	var data = make(map[string]interface{})
//	//fmt.Println("正常")
//	for i := 0; i < t.NumField(); i++ {
//		//fmt.Println(t.Field(i).Name)
//		//fmt.Println(v.Field(i).Interface())
//		//fmt.Println("准备赋值")
//		data[t.Field(i).Name] = v.Field(i).Interface()
//	}
//	//fmt.Println("结束")
//	return data
//}

//func stringsToJSON(str string) string {
//	rs := []rune(str)
//	jsons := ""
//	for _, r := range rs {
//		rint := int(r)
//		if rint < 128 {
//			jsons += string(r)
//		} else {
//			jsons += "\\u" + strconv.FormatInt(int64(rint), 16) // json
//		}
//	}
//	return jsons
//}
